class AbstractGame():

    def __init__(self):
        self.title = None

    def start(self):
        self.__initalizeGame()

    def stop(self):
        print 'Stopping game', self.title

    def quit(self):
        print 'Quiting game', self.title

    def __initalizeGame(self):
        print "testing"
        pass

class TicTacToeGame(AbstractGame):
    
    def __init__(self):
        self.title = "Tic Tac Toe"
        print "TicTacToeGame Class"

    def __initialzieGame(self):
        print "Creating Game", self.title

class CheckersGame(AbstractGame):
    
    def __init__(self):
        print "creating instance"
        self.title = "Checkers"
        self.__initializeGame()

class GameFactory():

    @staticmethod
    def createGame(game_option):
        if user_selection == 'checkers':
            return CheckersGame()
        elif user_selection == 'tictactoe':
            return TicTacToeGame()
        else:
            raise "Game does not exist"

class AbstractPlayer():

    def __init__(self):
        pass

    def move(self):
        print "Moving Player"

class CheckersPlayer(AbstractPlayer):

    def __init__(self):
        self.title = "CheckerPlayer"
        print self.title

class TicTacToePlayer(AbstractPlayer):

    def __init__(self):
        self.title = "TicTacPlayer"
        print self.title

user_selection = 'checkers'

try:
    game = GameFactory.createGame(user_selection)
    print
    game.start()
except Exception as e:
    print e

